#include <gtkmm.h>

class MyWindow : public Gtk::Window {
public:
    MyWindow():context_id(0) {
        set_title("GtkStatusbar Example");  // 设置窗口标题
        set_default_size(400, 200);  // 设置窗口默认大小

        Gtk::Box* vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10));  // 创建垂直盒子容器
        add(*vbox);  // 将盒子容器添加到窗口

        Gtk::Button* button = Gtk::manage(new Gtk::Button("Show Message"));  // 创建按钮控件
        vbox->pack_start(*button);  // 将按钮添加到盒子容器中

        statusbar = Gtk::manage(new Gtk::Statusbar());  // 创建状态栏控件
        vbox->pack_end(*statusbar, Gtk::PACK_SHRINK);  // 将状态栏添加到盒子容器中，并设置为收缩模式

        // 获取状态栏的上下文 ID
        context_id = statusbar->get_context_id("example");

        // 为按钮点击事件连接信号处理函数
        button->signal_clicked().connect(sigc::mem_fun(*this, &MyWindow::on_button_clicked));

        show_all_children();  // 显示所有子控件
    }

    virtual ~MyWindow() {}

protected:
    // 按钮点击事件处理函数
    void on_button_clicked() {
        // 将消息推送到状态栏
        statusbar->push( "Button clicked!");  
    }

    Gtk::Statusbar* statusbar;  // 状态栏控件指针
    guint context_id;  // 状态栏上下文 ID
};

int main(int argc, char *argv[]) {
    auto app = Gtk::Application::create(argc, argv, "com.example.GtkStatusbarExample");  // 创建 GTK 应用程序实例

    MyWindow window;  // 创建主窗口实例

    return app->run(window);  // 运行应用程序
}

